home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / mozilla-firefox / include / java / jni.h < prev    next >
C/C++ Source or Header  |  2006-05-08  |  63KB  |  1,811 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Java Runtime Interface.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation and Sun Microsystems, Inc.
  18.  * Portions created by the Initial Developer are Copyright (C) 1993-1996
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. #ifndef JNI_H
  38. #define JNI_H
  39.  
  40. #include <stdio.h>
  41. #include <stdarg.h>
  42.  
  43. /* jni_md.h contains the machine-dependent typedefs for jbyte, jint 
  44.    and jlong */ 
  45.  
  46. #include "jni_md.h"
  47.  
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51.  
  52. /*
  53.  * JNI Types
  54.  */
  55.  
  56. typedef unsigned char    jboolean;
  57. typedef unsigned short    jchar;
  58. typedef short        jshort;
  59. typedef float        jfloat;
  60. typedef double        jdouble;
  61.  
  62. typedef jint            jsize;
  63.  
  64. #ifdef __cplusplus
  65.  
  66. class _jobject {};
  67. class _jclass : public _jobject {};
  68. class _jthrowable : public _jobject {};
  69. class _jstring : public _jobject {};
  70. class _jarray : public _jobject {};
  71. class _jbooleanArray : public _jarray {};
  72. class _jbyteArray : public _jarray {};
  73. class _jcharArray : public _jarray {};
  74. class _jshortArray : public _jarray {};
  75. class _jintArray : public _jarray {};
  76. class _jlongArray : public _jarray {};
  77. class _jfloatArray : public _jarray {};
  78. class _jdoubleArray : public _jarray {};
  79. class _jobjectArray : public _jarray {};
  80.  
  81. typedef _jobject *jobject;
  82. typedef _jclass *jclass;
  83. typedef _jthrowable *jthrowable;
  84. typedef _jstring *jstring;
  85. typedef _jarray *jarray;
  86. typedef _jbooleanArray *jbooleanArray;
  87. typedef _jbyteArray *jbyteArray;
  88. typedef _jcharArray *jcharArray;
  89. typedef _jshortArray *jshortArray;
  90. typedef _jintArray *jintArray;
  91. typedef _jlongArray *jlongArray;
  92. typedef _jfloatArray *jfloatArray;
  93. typedef _jdoubleArray *jdoubleArray;
  94. typedef _jobjectArray *jobjectArray;
  95.  
  96. #else
  97.  
  98. struct _jobject;
  99.  
  100. typedef struct _jobject *jobject;
  101. typedef jobject jclass;
  102. typedef jobject jthrowable;
  103. typedef jobject jstring;
  104. typedef jobject jarray;
  105. typedef jarray jbooleanArray;
  106. typedef jarray jbyteArray;
  107. typedef jarray jcharArray;
  108. typedef jarray jshortArray;
  109. typedef jarray jintArray;
  110. typedef jarray jlongArray;
  111. typedef jarray jfloatArray;
  112. typedef jarray jdoubleArray;
  113. typedef jarray jobjectArray;
  114.  
  115. #endif
  116.  
  117. #if 0    /* moved to jri_md.h */
  118. typedef jobject jref; /* For transition---not meant to be part of public 
  119.              API anymore.*/
  120. #endif
  121.  
  122. typedef union jvalue {
  123.     jboolean z;
  124.     jbyte    b;
  125.     jchar    c;
  126.     jshort   s;
  127.     jint     i;
  128.     jlong    j;
  129.     jfloat   f;
  130.     jdouble  d;
  131.     jobject  l;
  132. } jvalue;
  133.  
  134. struct _jfieldID;
  135. typedef struct _jfieldID *jfieldID;
  136.  
  137. struct _jmethodID;
  138. typedef struct _jmethodID *jmethodID;
  139.  
  140. /*
  141.  * jboolean constants
  142.  */
  143.  
  144. #define JNI_FALSE 0
  145. #define JNI_TRUE 1
  146.  
  147. /*
  148.  * possible return values for JNI functions.
  149.  */
  150.  
  151. #define JNI_OK 0
  152. #define JNI_ERR (-1)
  153.  
  154. /*
  155.  * used in ReleaseScalarArrayElements
  156.  */
  157.   
  158. #define JNI_COMMIT 1
  159. #define JNI_ABORT 2
  160.  
  161. /*
  162.  * used in RegisterNatives to describe native method name, signature,
  163.  * and function pointer.
  164.  */
  165.  
  166. typedef struct {
  167.     char *name;
  168.     char *signature;
  169.     void *fnPtr;
  170. } JNINativeMethod;
  171.  
  172. /*
  173.  * JNI Native Method Interface.
  174.  */
  175.  
  176. struct JNINativeInterface_;
  177.  
  178. struct JNIEnv_;
  179.  
  180. #ifdef __cplusplus
  181. typedef JNIEnv_ JNIEnv;
  182. #else
  183. typedef const struct JNINativeInterface_ *JNIEnv;
  184. #endif
  185.  
  186. /*
  187.  * JNI Invocation Interface.
  188.  */
  189.  
  190. struct JNIInvokeInterface_;
  191.  
  192. struct JavaVM_;
  193.  
  194. #ifdef __cplusplus
  195. typedef JavaVM_ JavaVM;
  196. #else
  197. typedef const struct JNIInvokeInterface_ *JavaVM;
  198. #endif
  199.  
  200. struct JNINativeInterface_ {
  201.     void *reserved0;
  202.     void *reserved1;
  203.     void *reserved2;
  204.  
  205.     void *reserved3;
  206.     jint (JNICALL *GetVersion)(JNIEnv *env);
  207.  
  208.     jclass (JNICALL *DefineClass)
  209.       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, 
  210.        jsize len);
  211.     jclass (JNICALL *FindClass)
  212.       (JNIEnv *env, const char *name);
  213.  
  214.     void *reserved4;
  215.     void *reserved5;
  216.     void *reserved6;
  217.  
  218.     jclass (JNICALL *GetSuperclass)
  219.       (JNIEnv *env, jclass sub);
  220.     jboolean (JNICALL *IsAssignableFrom)
  221.       (JNIEnv *env, jclass sub, jclass sup);
  222.     void *reserved7;
  223.  
  224.  
  225.     jint (JNICALL *Throw)
  226.       (JNIEnv *env, jthrowable obj);
  227.     jint (JNICALL *ThrowNew)
  228.       (JNIEnv *env, jclass clazz, const char *msg);
  229.     jthrowable (JNICALL *ExceptionOccurred)
  230.       (JNIEnv *env);
  231.     void (JNICALL *ExceptionDescribe)
  232.       (JNIEnv *env);
  233.     void (JNICALL *ExceptionClear)
  234.       (JNIEnv *env);
  235.     void (JNICALL *FatalError)
  236.       (JNIEnv *env, const char *msg);
  237.     void *reserved8;
  238.     void *reserved9;
  239.  
  240.     jobject (JNICALL *NewGlobalRef)
  241.       (JNIEnv *env, jobject lobj);
  242.     void (JNICALL *DeleteGlobalRef)
  243.       (JNIEnv *env, jobject gref);
  244.     void (JNICALL *DeleteLocalRef)
  245.       (JNIEnv *env, jobject obj);
  246.     jboolean (JNICALL *IsSameObject)
  247.       (JNIEnv *env, jobject obj1, jobject obj2);
  248.     void *reserved10;
  249.     void *reserved11;
  250.  
  251.     jobject (JNICALL *AllocObject)
  252.       (JNIEnv *env, jclass clazz);
  253.     jobject (JNICALL *NewObject)
  254.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  255.     jobject (JNICALL *NewObjectV)
  256.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  257.     jobject (JNICALL *NewObjectA)
  258.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  259.  
  260.     jclass (JNICALL *GetObjectClass)
  261.       (JNIEnv *env, jobject obj);
  262.     jboolean (JNICALL *IsInstanceOf)
  263.       (JNIEnv *env, jobject obj, jclass clazz);
  264.  
  265.     jmethodID (JNICALL *GetMethodID)
  266.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  267.  
  268.     jobject (JNICALL *CallObjectMethod)
  269.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  270.     jobject (JNICALL *CallObjectMethodV)
  271.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  272.     jobject (JNICALL *CallObjectMethodA)
  273.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  274.  
  275.     jboolean (JNICALL *CallBooleanMethod)
  276.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  277.     jboolean (JNICALL *CallBooleanMethodV)
  278.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  279.     jboolean (JNICALL *CallBooleanMethodA)
  280.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  281.  
  282.     jbyte (JNICALL *CallByteMethod)
  283.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  284.     jbyte (JNICALL *CallByteMethodV)
  285.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  286.     jbyte (JNICALL *CallByteMethodA)
  287.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  288.  
  289.     jchar (JNICALL *CallCharMethod)
  290.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  291.     jchar (JNICALL *CallCharMethodV)
  292.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  293.     jchar (JNICALL *CallCharMethodA)
  294.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  295.  
  296.     jshort (JNICALL *CallShortMethod)
  297.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  298.     jshort (JNICALL *CallShortMethodV)
  299.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  300.     jshort (JNICALL *CallShortMethodA)
  301.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  302.  
  303.     jint (JNICALL *CallIntMethod)
  304.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  305.     jint (JNICALL *CallIntMethodV)
  306.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  307.     jint (JNICALL *CallIntMethodA)
  308.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  309.  
  310.     jlong (JNICALL *CallLongMethod)
  311.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  312.     jlong (JNICALL *CallLongMethodV)
  313.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  314.     jlong (JNICALL *CallLongMethodA)
  315.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  316.  
  317.     jfloat (JNICALL *CallFloatMethod)
  318.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  319.     jfloat (JNICALL *CallFloatMethodV)
  320.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  321.     jfloat (JNICALL *CallFloatMethodA)
  322.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  323.  
  324.     jdouble (JNICALL *CallDoubleMethod)
  325.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  326.     jdouble (JNICALL *CallDoubleMethodV)
  327.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  328.     jdouble (JNICALL *CallDoubleMethodA)
  329.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  330.  
  331.     void (JNICALL *CallVoidMethod)
  332.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  333.     void (JNICALL *CallVoidMethodV)
  334.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  335.     void (JNICALL *CallVoidMethodA)
  336.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  337.  
  338.     jobject (JNICALL *CallNonvirtualObjectMethod)
  339.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  340.     jobject (JNICALL *CallNonvirtualObjectMethodV)
  341.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  342.        va_list args);
  343.     jobject (JNICALL *CallNonvirtualObjectMethodA)
  344.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  345.        jvalue * args);
  346.  
  347.     jboolean (JNICALL *CallNonvirtualBooleanMethod)
  348.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  349.     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
  350.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  351.        va_list args);
  352.     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
  353.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  354.        jvalue * args);
  355.  
  356.     jbyte (JNICALL *CallNonvirtualByteMethod)
  357.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  358.     jbyte (JNICALL *CallNonvirtualByteMethodV)
  359.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  360.        va_list args);
  361.     jbyte (JNICALL *CallNonvirtualByteMethodA)
  362.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  363.        jvalue *args);
  364.  
  365.     jchar (JNICALL *CallNonvirtualCharMethod)
  366.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  367.     jchar (JNICALL *CallNonvirtualCharMethodV)
  368.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  369.        va_list args);
  370.     jchar (JNICALL *CallNonvirtualCharMethodA)
  371.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  372.        jvalue *args);
  373.  
  374.     jshort (JNICALL *CallNonvirtualShortMethod)
  375.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  376.     jshort (JNICALL *CallNonvirtualShortMethodV)
  377.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  378.        va_list args);
  379.     jshort (JNICALL *CallNonvirtualShortMethodA)
  380.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  381.        jvalue *args);
  382.  
  383.     jint (JNICALL *CallNonvirtualIntMethod)
  384.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  385.     jint (JNICALL *CallNonvirtualIntMethodV)
  386.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  387.        va_list args);
  388.     jint (JNICALL *CallNonvirtualIntMethodA)
  389.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  390.        jvalue *args);
  391.  
  392.     jlong (JNICALL *CallNonvirtualLongMethod)
  393.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  394.     jlong (JNICALL *CallNonvirtualLongMethodV)
  395.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  396.        va_list args);
  397.     jlong (JNICALL *CallNonvirtualLongMethodA)
  398.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  399.        jvalue *args);
  400.  
  401.     jfloat (JNICALL *CallNonvirtualFloatMethod)
  402.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  403.     jfloat (JNICALL *CallNonvirtualFloatMethodV)
  404.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  405.        va_list args);
  406.     jfloat (JNICALL *CallNonvirtualFloatMethodA)
  407.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  408.        jvalue *args);
  409.  
  410.     jdouble (JNICALL *CallNonvirtualDoubleMethod)
  411.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  412.     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
  413.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  414.        va_list args);
  415.     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
  416.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  417.        jvalue *args);
  418.  
  419.     void (JNICALL *CallNonvirtualVoidMethod)
  420.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  421.     void (JNICALL *CallNonvirtualVoidMethodV)
  422.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  423.        va_list args);
  424.     void (JNICALL *CallNonvirtualVoidMethodA)
  425.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  426.        jvalue * args);
  427.  
  428.     jfieldID (JNICALL *GetFieldID)
  429.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  430.  
  431.     jobject (JNICALL *GetObjectField)
  432.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  433.     jboolean (JNICALL *GetBooleanField)
  434.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  435.     jbyte (JNICALL *GetByteField)
  436.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  437.     jchar (JNICALL *GetCharField)
  438.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  439.     jshort (JNICALL *GetShortField)
  440.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  441.     jint (JNICALL *GetIntField)
  442.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  443.     jlong (JNICALL *GetLongField)
  444.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  445.     jfloat (JNICALL *GetFloatField)
  446.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  447.     jdouble (JNICALL *GetDoubleField)
  448.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  449.  
  450.     void (JNICALL *SetObjectField)
  451.       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
  452.     void (JNICALL *SetBooleanField)
  453.       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
  454.     void (JNICALL *SetByteField)
  455.       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
  456.     void (JNICALL *SetCharField)
  457.       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
  458.     void (JNICALL *SetShortField)
  459.       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
  460.     void (JNICALL *SetIntField)
  461.       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
  462.     void (JNICALL *SetLongField)
  463.       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
  464.     void (JNICALL *SetFloatField)
  465.       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
  466.     void (JNICALL *SetDoubleField)
  467.       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
  468.  
  469.     jmethodID (JNICALL *GetStaticMethodID)
  470.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  471.  
  472.     jobject (JNICALL *CallStaticObjectMethod)
  473.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  474.     jobject (JNICALL *CallStaticObjectMethodV)
  475.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  476.     jobject (JNICALL *CallStaticObjectMethodA)
  477.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  478.  
  479.     jboolean (JNICALL *CallStaticBooleanMethod)
  480.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  481.     jboolean (JNICALL *CallStaticBooleanMethodV)
  482.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  483.     jboolean (JNICALL *CallStaticBooleanMethodA)
  484.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  485.  
  486.     jbyte (JNICALL *CallStaticByteMethod)
  487.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  488.     jbyte (JNICALL *CallStaticByteMethodV)
  489.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  490.     jbyte (JNICALL *CallStaticByteMethodA)
  491.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  492.  
  493.     jchar (JNICALL *CallStaticCharMethod)
  494.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  495.     jchar (JNICALL *CallStaticCharMethodV)
  496.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  497.     jchar (JNICALL *CallStaticCharMethodA)
  498.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  499.  
  500.     jshort (JNICALL *CallStaticShortMethod)
  501.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  502.     jshort (JNICALL *CallStaticShortMethodV)
  503.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  504.     jshort (JNICALL *CallStaticShortMethodA)
  505.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  506.  
  507.     jint (JNICALL *CallStaticIntMethod)
  508.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  509.     jint (JNICALL *CallStaticIntMethodV)
  510.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  511.     jint (JNICALL *CallStaticIntMethodA)
  512.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  513.  
  514.     jlong (JNICALL *CallStaticLongMethod)
  515.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  516.     jlong (JNICALL *CallStaticLongMethodV)
  517.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  518.     jlong (JNICALL *CallStaticLongMethodA)
  519.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  520.  
  521.     jfloat (JNICALL *CallStaticFloatMethod)
  522.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  523.     jfloat (JNICALL *CallStaticFloatMethodV)
  524.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  525.     jfloat (JNICALL *CallStaticFloatMethodA)
  526.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  527.  
  528.     jdouble (JNICALL *CallStaticDoubleMethod)
  529.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  530.     jdouble (JNICALL *CallStaticDoubleMethodV)
  531.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  532.     jdouble (JNICALL *CallStaticDoubleMethodA)       
  533.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  534.  
  535.     void (JNICALL *CallStaticVoidMethod)
  536.       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
  537.     void (JNICALL *CallStaticVoidMethodV)
  538.       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
  539.     void (JNICALL *CallStaticVoidMethodA)
  540.       (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
  541.  
  542.     jfieldID (JNICALL *GetStaticFieldID)
  543.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  544.     jobject (JNICALL *GetStaticObjectField)
  545.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  546.     jboolean (JNICALL *GetStaticBooleanField)
  547.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  548.     jbyte (JNICALL *GetStaticByteField)
  549.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  550.     jchar (JNICALL *GetStaticCharField)
  551.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  552.     jshort (JNICALL *GetStaticShortField)
  553.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  554.     jint (JNICALL *GetStaticIntField)
  555.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  556.     jlong (JNICALL *GetStaticLongField)
  557.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  558.     jfloat (JNICALL *GetStaticFloatField)
  559.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  560.     jdouble (JNICALL *GetStaticDoubleField)
  561.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  562.  
  563.     void (JNICALL *SetStaticObjectField)
  564.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
  565.     void (JNICALL *SetStaticBooleanField)
  566.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
  567.     void (JNICALL *SetStaticByteField)
  568.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
  569.     void (JNICALL *SetStaticCharField)
  570.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
  571.     void (JNICALL *SetStaticShortField)
  572.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
  573.     void (JNICALL *SetStaticIntField)
  574.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
  575.     void (JNICALL *SetStaticLongField)
  576.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
  577.     void (JNICALL *SetStaticFloatField)
  578.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
  579.     void (JNICALL *SetStaticDoubleField)
  580.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
  581.  
  582.     jstring (JNICALL *NewString)
  583.       (JNIEnv *env, const jchar *unicode, jsize len);
  584.     jsize (JNICALL *GetStringLength)
  585.       (JNIEnv *env, jstring str);
  586.     const jchar *(JNICALL *GetStringChars)
  587.       (JNIEnv *env, jstring str, jboolean *isCopy);
  588.     void (JNICALL *ReleaseStringChars)
  589.       (JNIEnv *env, jstring str, const jchar *chars);
  590.   
  591.     jstring (JNICALL *NewStringUTF)
  592.       (JNIEnv *env, const char *utf);
  593.     jsize (JNICALL *GetStringUTFLength)
  594.       (JNIEnv *env, jstring str);
  595.     const char* (JNICALL *GetStringUTFChars)
  596.       (JNIEnv *env, jstring str, jboolean *isCopy);
  597.     void (JNICALL *ReleaseStringUTFChars)
  598.       (JNIEnv *env, jstring str, const char* chars);
  599.   
  600.  
  601.     jsize (JNICALL *GetArrayLength)
  602.       (JNIEnv *env, jarray array);
  603.  
  604.     jobjectArray (JNICALL *NewObjectArray)
  605.       (JNIEnv *env, jsize len, jclass clazz, jobject init);
  606.     jobject (JNICALL *GetObjectArrayElement)
  607.       (JNIEnv *env, jobjectArray array, jsize index);
  608.     void (JNICALL *SetObjectArrayElement)
  609.       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
  610.  
  611.     jbooleanArray (JNICALL *NewBooleanArray)
  612.       (JNIEnv *env, jsize len);
  613.     jbyteArray (JNICALL *NewByteArray)
  614.       (JNIEnv *env, jsize len);
  615.     jcharArray (JNICALL *NewCharArray)
  616.       (JNIEnv *env, jsize len);
  617.     jshortArray (JNICALL *NewShortArray)
  618.       (JNIEnv *env, jsize len);
  619.     jintArray (JNICALL *NewIntArray)
  620.       (JNIEnv *env, jsize len);
  621.     jlongArray (JNICALL *NewLongArray)
  622.       (JNIEnv *env, jsize len);
  623.     jfloatArray (JNICALL *NewFloatArray)
  624.       (JNIEnv *env, jsize len);
  625.     jdoubleArray (JNICALL *NewDoubleArray)
  626.       (JNIEnv *env, jsize len);
  627.  
  628.     jboolean * (JNICALL *GetBooleanArrayElements)
  629.       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
  630.     jbyte * (JNICALL *GetByteArrayElements)
  631.       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
  632.     jchar * (JNICALL *GetCharArrayElements)
  633.       (JNIEnv *env, jcharArray array, jboolean *isCopy);
  634.     jshort * (JNICALL *GetShortArrayElements)
  635.       (JNIEnv *env, jshortArray array, jboolean *isCopy);
  636.     jint * (JNICALL *GetIntArrayElements)
  637.       (JNIEnv *env, jintArray array, jboolean *isCopy);
  638.     jlong * (JNICALL *GetLongArrayElements)
  639.       (JNIEnv *env, jlongArray array, jboolean *isCopy);
  640.     jfloat * (JNICALL *GetFloatArrayElements)
  641.       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
  642.     jdouble * (JNICALL *GetDoubleArrayElements)
  643.       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
  644.  
  645.     void (JNICALL *ReleaseBooleanArrayElements)
  646.       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
  647.     void (JNICALL *ReleaseByteArrayElements)
  648.       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
  649.     void (JNICALL *ReleaseCharArrayElements)
  650.       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
  651.     void (JNICALL *ReleaseShortArrayElements)
  652.       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
  653.     void (JNICALL *ReleaseIntArrayElements)
  654.       (JNIEnv *env, jintArray array, jint *elems, jint mode);
  655.     void (JNICALL *ReleaseLongArrayElements)
  656.       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
  657.     void (JNICALL *ReleaseFloatArrayElements)
  658.       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
  659.     void (JNICALL *ReleaseDoubleArrayElements)
  660.       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
  661.  
  662.     void (JNICALL *GetBooleanArrayRegion)
  663.       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
  664.     void (JNICALL *GetByteArrayRegion)
  665.       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
  666.     void (JNICALL *GetCharArrayRegion)
  667.       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
  668.     void (JNICALL *GetShortArrayRegion)
  669.       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
  670.     void (JNICALL *GetIntArrayRegion)
  671.       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
  672.     void (JNICALL *GetLongArrayRegion)
  673.       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
  674.     void (JNICALL *GetFloatArrayRegion)
  675.       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
  676.     void (JNICALL *GetDoubleArrayRegion)
  677.       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
  678.  
  679.     void (JNICALL *SetBooleanArrayRegion)
  680.       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
  681.     void (JNICALL *SetByteArrayRegion)
  682.       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
  683.     void (JNICALL *SetCharArrayRegion)
  684.       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
  685.     void (JNICALL *SetShortArrayRegion)
  686.       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
  687.     void (JNICALL *SetIntArrayRegion)
  688.       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
  689.     void (JNICALL *SetLongArrayRegion)
  690.       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
  691.     void (JNICALL *SetFloatArrayRegion)
  692.       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
  693.     void (JNICALL *SetDoubleArrayRegion)
  694.       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
  695.  
  696.     jint (JNICALL *RegisterNatives)
  697.       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, 
  698.        jint nMethods);
  699.     jint (JNICALL *UnregisterNatives)
  700.       (JNIEnv *env, jclass clazz);
  701.  
  702.     jint (JNICALL *MonitorEnter)
  703.       (JNIEnv *env, jobject obj);
  704.     jint (JNICALL *MonitorExit)
  705.       (JNIEnv *env, jobject obj);
  706.  
  707.     jint (JNICALL *GetJavaVM)
  708.       (JNIEnv *env, JavaVM **vm);
  709. };
  710.  
  711. /*
  712.  * We use inlined functions for C++ so that programmers can write:
  713.  * 
  714.  *    env->FindClass("java/lang/String")
  715.  *
  716.  * in C++ rather than:
  717.  *
  718.  *    (*env)->FindClass(env, "java/lang/String")
  719.  *
  720.  * in C.
  721.  */
  722.  
  723. struct JNIEnv_ {
  724.     const struct JNINativeInterface_ *functions;
  725.     void *reserved0;
  726.     void *reserved1[6];
  727. #ifdef __cplusplus
  728.  
  729.     jint GetVersion() {
  730.         return functions->GetVersion(this);
  731.     }
  732.     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
  733.                jsize len) {
  734.         return functions->DefineClass(this, name, loader, buf, len);
  735.     }
  736.     jclass FindClass(const char *name) {
  737.         return functions->FindClass(this, name);
  738.     }
  739.     jclass GetSuperclass(jclass sub) {
  740.         return functions->GetSuperclass(this, sub);
  741.     }
  742.     jboolean IsAssignableFrom(jclass sub, jclass sup) {
  743.         return functions->IsAssignableFrom(this, sub, sup);
  744.     }
  745.  
  746.     jint Throw(jthrowable obj) {
  747.         return functions->Throw(this, obj);
  748.     }    
  749.     jint ThrowNew(jclass clazz, const char *msg) {
  750.         return functions->ThrowNew(this, clazz, msg);
  751.     }
  752.     jthrowable ExceptionOccurred() {
  753.         return functions->ExceptionOccurred(this);
  754.     }
  755.     void ExceptionDescribe() {
  756.         functions->ExceptionDescribe(this);
  757.     }
  758.     void ExceptionClear() {
  759.         functions->ExceptionClear(this);
  760.     }
  761.     void FatalError(const char *msg) {
  762.         functions->FatalError(this, msg);
  763.     }
  764.  
  765.     jobject NewGlobalRef(jobject lobj) {
  766.         return functions->NewGlobalRef(this,lobj);
  767.     }
  768.     void DeleteGlobalRef(jobject gref) {
  769.         functions->DeleteGlobalRef(this,gref);
  770.     }
  771.     void DeleteLocalRef(jobject obj) {
  772.         functions->DeleteLocalRef(this, obj);
  773.     }
  774.  
  775.     jboolean IsSameObject(jobject obj1, jobject obj2) {
  776.         return functions->IsSameObject(this,obj1,obj2);
  777.     }
  778.  
  779.     jobject AllocObject(jclass clazz) {
  780.         return functions->AllocObject(this,clazz);
  781.     }
  782.     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
  783.         va_list args;
  784.     jobject result;
  785.     va_start(args, methodID);
  786.         result = functions->NewObjectV(this,clazz,methodID,args);
  787.     va_end(args);
  788.     return result;
  789.     }
  790.     jobject NewObjectV(jclass clazz, jmethodID methodID, 
  791.                va_list args) {
  792.         return functions->NewObjectV(this,clazz,methodID,args);
  793.     }
  794.     jobject NewObjectA(jclass clazz, jmethodID methodID, 
  795.                jvalue *args) {
  796.         return functions->NewObjectA(this,clazz,methodID,args);
  797.     }
  798.  
  799.     jclass GetObjectClass(jobject obj) {
  800.         return functions->GetObjectClass(this,obj);
  801.     }
  802.     jboolean IsInstanceOf(jobject obj, jclass clazz) {
  803.         return functions->IsInstanceOf(this,obj,clazz);
  804.     }
  805.  
  806.     jmethodID GetMethodID(jclass clazz, const char *name, 
  807.               const char *sig) {
  808.         return functions->GetMethodID(this,clazz,name,sig);
  809.     }
  810.  
  811.     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
  812.         va_list args;
  813.     jobject result;
  814.     va_start(args,methodID);
  815.     result = functions->CallObjectMethodV(this,obj,methodID,args);
  816.     va_end(args);
  817.     return result;
  818.     }
  819.     jobject CallObjectMethodV(jobject obj, jmethodID methodID, 
  820.             va_list args) {
  821.         return functions->CallObjectMethodV(this,obj,methodID,args);
  822.     }
  823.     jobject CallObjectMethodA(jobject obj, jmethodID methodID, 
  824.             jvalue * args) {
  825.         return functions->CallObjectMethodA(this,obj,methodID,args);
  826.     }
  827.  
  828.     jboolean CallBooleanMethod(jobject obj, 
  829.                    jmethodID methodID, ...) {
  830.         va_list args;
  831.     jboolean result;
  832.     va_start(args,methodID);
  833.     result = functions->CallBooleanMethodV(this,obj,methodID,args);
  834.     va_end(args);
  835.     return result;
  836.     }
  837.     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID, 
  838.                 va_list args) {
  839.         return functions->CallBooleanMethodV(this,obj,methodID,args);
  840.     }
  841.     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID, 
  842.                 jvalue * args) {
  843.         return functions->CallBooleanMethodA(this,obj,methodID, args);
  844.     }
  845.  
  846.     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
  847.         va_list args;
  848.     jbyte result;
  849.     va_start(args,methodID);
  850.     result = functions->CallByteMethodV(this,obj,methodID,args);
  851.     va_end(args);
  852.     return result;
  853.     }
  854.     jbyte CallByteMethodV(jobject obj, jmethodID methodID, 
  855.               va_list args) {
  856.         return functions->CallByteMethodV(this,obj,methodID,args);
  857.     }
  858.     jbyte CallByteMethodA(jobject obj, jmethodID methodID, 
  859.               jvalue * args) {
  860.         return functions->CallByteMethodA(this,obj,methodID,args);
  861.     }
  862.  
  863.     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
  864.         va_list args;
  865.     jchar result;
  866.     va_start(args,methodID);
  867.     result = functions->CallCharMethodV(this,obj,methodID,args);
  868.     va_end(args);
  869.     return result;
  870.     }
  871.     jchar CallCharMethodV(jobject obj, jmethodID methodID, 
  872.               va_list args) {
  873.         return functions->CallCharMethodV(this,obj,methodID,args);
  874.     }
  875.     jchar CallCharMethodA(jobject obj, jmethodID methodID, 
  876.               jvalue * args) {
  877.         return functions->CallCharMethodA(this,obj,methodID,args);
  878.     }
  879.  
  880.     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
  881.         va_list args;
  882.     jshort result;
  883.     va_start(args,methodID);
  884.     result = functions->CallShortMethodV(this,obj,methodID,args);
  885.     va_end(args);
  886.     return result;
  887.     }
  888.     jshort CallShortMethodV(jobject obj, jmethodID methodID, 
  889.                 va_list args) {
  890.         return functions->CallShortMethodV(this,obj,methodID,args);
  891.     }
  892.     jshort CallShortMethodA(jobject obj, jmethodID methodID, 
  893.                 jvalue * args) {
  894.         return functions->CallShortMethodA(this,obj,methodID,args);
  895.     }
  896.  
  897.     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
  898.         va_list args;
  899.     jint result;
  900.     va_start(args,methodID);
  901.     result = functions->CallIntMethodV(this,obj,methodID,args);
  902.     va_end(args);
  903.     return result;
  904.     }
  905.     jint CallIntMethodV(jobject obj, jmethodID methodID, 
  906.             va_list args) {
  907.         return functions->CallIntMethodV(this,obj,methodID,args);
  908.     }
  909.     jint CallIntMethodA(jobject obj, jmethodID methodID, 
  910.             jvalue * args) {
  911.         return functions->CallIntMethodA(this,obj,methodID,args);
  912.     }
  913.  
  914.     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
  915.         va_list args;
  916.     jlong result;
  917.     va_start(args,methodID);
  918.     result = functions->CallLongMethodV(this,obj,methodID,args);
  919.     va_end(args);
  920.     return result;
  921.     }
  922.     jlong CallLongMethodV(jobject obj, jmethodID methodID, 
  923.               va_list args) {
  924.         return functions->CallLongMethodV(this,obj,methodID,args);
  925.     }
  926.     jlong CallLongMethodA(jobject obj, jmethodID methodID, 
  927.               jvalue * args) {
  928.         return functions->CallLongMethodA(this,obj,methodID,args);
  929.     }
  930.  
  931.     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
  932.         va_list args;
  933.     jfloat result;
  934.     va_start(args,methodID);
  935.     result = functions->CallFloatMethodV(this,obj,methodID,args);
  936.     va_end(args);
  937.     return result;
  938.     }
  939.     jfloat CallFloatMethodV(jobject obj, jmethodID methodID, 
  940.                 va_list args) {
  941.         return functions->CallFloatMethodV(this,obj,methodID,args);
  942.     }
  943.     jfloat CallFloatMethodA(jobject obj, jmethodID methodID, 
  944.                 jvalue * args) {
  945.         return functions->CallFloatMethodA(this,obj,methodID,args);
  946.     }
  947.  
  948.     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
  949.         va_list args;
  950.     jdouble result;
  951.     va_start(args,methodID);
  952.     result = functions->CallDoubleMethodV(this,obj,methodID,args);
  953.     va_end(args);
  954.     return result;
  955.     }
  956.     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID, 
  957.             va_list args) {
  958.         return functions->CallDoubleMethodV(this,obj,methodID,args);
  959.     }
  960.     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID, 
  961.             jvalue * args) {
  962.         return functions->CallDoubleMethodA(this,obj,methodID,args);
  963.     }
  964.  
  965.     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
  966.         va_list args;
  967.     va_start(args,methodID);
  968.     functions->CallVoidMethodV(this,obj,methodID,args);
  969.     va_end(args);
  970.     }
  971.     void CallVoidMethodV(jobject obj, jmethodID methodID, 
  972.              va_list args) {
  973.         functions->CallVoidMethodV(this,obj,methodID,args);
  974.     }
  975.     void CallVoidMethodA(jobject obj, jmethodID methodID, 
  976.              jvalue * args) {
  977.         functions->CallVoidMethodA(this,obj,methodID,args);
  978.     }
  979.  
  980.     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz, 
  981.                        jmethodID methodID, ...) {
  982.         va_list args;
  983.     jobject result;
  984.     va_start(args,methodID);
  985.     result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  986.                             methodID,args);
  987.     va_end(args);
  988.     return result;
  989.     }
  990.     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz, 
  991.                     jmethodID methodID, va_list args) {
  992.         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  993.                               methodID,args);
  994.     }
  995.     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz, 
  996.                     jmethodID methodID, jvalue * args) {
  997.         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
  998.                               methodID,args);
  999.     }
  1000.  
  1001.     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz, 
  1002.                      jmethodID methodID, ...) {
  1003.         va_list args;
  1004.     jboolean result;
  1005.     va_start(args,methodID);
  1006.     result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  1007.                              methodID,args);
  1008.     va_end(args);
  1009.     return result;
  1010.     }
  1011.     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz, 
  1012.                       jmethodID methodID, va_list args) {
  1013.         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  1014.                                methodID,args);
  1015.     }
  1016.     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz, 
  1017.                       jmethodID methodID, jvalue * args) {
  1018.         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
  1019.                                methodID, args);
  1020.     }
  1021.  
  1022.     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz, 
  1023.                    jmethodID methodID, ...) {
  1024.         va_list args;
  1025.     jbyte result;
  1026.     va_start(args,methodID);
  1027.     result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
  1028.                               methodID,args);
  1029.     va_end(args);
  1030.     return result;
  1031.     }
  1032.     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz, 
  1033.                     jmethodID methodID, va_list args) {
  1034.         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
  1035.                             methodID,args);
  1036.     }
  1037.     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz, 
  1038.                     jmethodID methodID, jvalue * args) {
  1039.         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
  1040.                             methodID,args);
  1041.     }
  1042.  
  1043.     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz, 
  1044.                    jmethodID methodID, ...) {
  1045.         va_list args;
  1046.     jchar result;
  1047.     va_start(args,methodID);
  1048.     result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
  1049.                               methodID,args);
  1050.     va_end(args);
  1051.     return result;
  1052.     }
  1053.     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz, 
  1054.                     jmethodID methodID, va_list args) {
  1055.         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
  1056.                             methodID,args);
  1057.     }
  1058.     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz, 
  1059.                     jmethodID methodID, jvalue * args) {
  1060.         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
  1061.                             methodID,args);
  1062.     }
  1063.  
  1064.     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz, 
  1065.                      jmethodID methodID, ...) {
  1066.         va_list args;
  1067.     jshort result;
  1068.     va_start(args,methodID);
  1069.     result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
  1070.                                methodID,args);
  1071.     va_end(args);
  1072.     return result;
  1073.     }
  1074.     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz, 
  1075.                       jmethodID methodID, va_list args) {
  1076.         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
  1077.                              methodID,args);
  1078.     }
  1079.     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
  1080.                       jmethodID methodID, jvalue * args) {
  1081.         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
  1082.                              methodID,args);
  1083.     }
  1084.  
  1085.     jint CallNonvirtualIntMethod(jobject obj, jclass clazz, 
  1086.                  jmethodID methodID, ...) {
  1087.         va_list args;
  1088.     jint result;
  1089.     va_start(args,methodID);
  1090.     result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
  1091.                              methodID,args);
  1092.     va_end(args);
  1093.     return result;
  1094.     }
  1095.     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz, 
  1096.                   jmethodID methodID, va_list args) {
  1097.         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
  1098.                            methodID,args);
  1099.     }
  1100.     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz, 
  1101.                   jmethodID methodID, jvalue * args) {
  1102.         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
  1103.                            methodID,args);
  1104.     }
  1105.  
  1106.     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
  1107.                    jmethodID methodID, ...) {
  1108.         va_list args;
  1109.     jlong result;
  1110.     va_start(args,methodID);
  1111.     result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
  1112.                               methodID,args);
  1113.     va_end(args);
  1114.     return result;
  1115.     }
  1116.     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
  1117.                     jmethodID methodID, va_list args) {
  1118.         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
  1119.                             methodID,args);
  1120.     }
  1121.     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz, 
  1122.                     jmethodID methodID, jvalue * args) {
  1123.         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
  1124.                             methodID,args);
  1125.     }
  1126.  
  1127.     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz, 
  1128.                      jmethodID methodID, ...) {
  1129.         va_list args;
  1130.     jfloat result;
  1131.     va_start(args,methodID);
  1132.     result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1133.                                methodID,args);
  1134.     va_end(args);
  1135.     return result;
  1136.     }
  1137.     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
  1138.                       jmethodID methodID, 
  1139.                       va_list args) {
  1140.         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1141.                              methodID,args);
  1142.     }
  1143.     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz, 
  1144.                       jmethodID methodID, 
  1145.                       jvalue * args) {
  1146.         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
  1147.                              methodID,args);
  1148.     }
  1149.  
  1150.     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
  1151.                        jmethodID methodID, ...) {
  1152.         va_list args;
  1153.     jdouble result;
  1154.     va_start(args,methodID);
  1155.     result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1156.                             methodID,args);
  1157.     va_end(args);
  1158.     return result;
  1159.     }
  1160.     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
  1161.                     jmethodID methodID, 
  1162.                     va_list args) {
  1163.         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1164.                               methodID,args);
  1165.     }
  1166.     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz, 
  1167.                     jmethodID methodID, 
  1168.                     jvalue * args) {
  1169.         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
  1170.                               methodID,args);
  1171.     }
  1172.  
  1173.     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
  1174.                   jmethodID methodID, ...) {
  1175.         va_list args;
  1176.     va_start(args,methodID);
  1177.     functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1178.     va_end(args);
  1179.     }
  1180.     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
  1181.                    jmethodID methodID, 
  1182.                    va_list args) {
  1183.         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1184.     }
  1185.     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
  1186.                    jmethodID methodID, 
  1187.                    jvalue * args) {
  1188.         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
  1189.     }
  1190.  
  1191.     jfieldID GetFieldID(jclass clazz, const char *name, 
  1192.             const char *sig) {
  1193.         return functions->GetFieldID(this,clazz,name,sig);
  1194.     }
  1195.  
  1196.     jobject GetObjectField(jobject obj, jfieldID fieldID) {
  1197.         return functions->GetObjectField(this,obj,fieldID);
  1198.     }
  1199.     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
  1200.         return functions->GetBooleanField(this,obj,fieldID);
  1201.     }
  1202.     jbyte GetByteField(jobject obj, jfieldID fieldID) {
  1203.         return functions->GetByteField(this,obj,fieldID);
  1204.     }
  1205.     jchar GetCharField(jobject obj, jfieldID fieldID) {
  1206.         return functions->GetCharField(this,obj,fieldID);
  1207.     }
  1208.     jshort GetShortField(jobject obj, jfieldID fieldID) {
  1209.         return functions->GetShortField(this,obj,fieldID);
  1210.     }
  1211.     jint GetIntField(jobject obj, jfieldID fieldID) {
  1212.         return functions->GetIntField(this,obj,fieldID);
  1213.     }
  1214.     jlong GetLongField(jobject obj, jfieldID fieldID) {
  1215.         return functions->GetLongField(this,obj,fieldID);
  1216.     }
  1217.     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
  1218.         return functions->GetFloatField(this,obj,fieldID);
  1219.     }
  1220.     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
  1221.         return functions->GetDoubleField(this,obj,fieldID);
  1222.     }
  1223.  
  1224.     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
  1225.         functions->SetObjectField(this,obj,fieldID,val);
  1226.     }
  1227.     void SetBooleanField(jobject obj, jfieldID fieldID, 
  1228.              jboolean val) {
  1229.         functions->SetBooleanField(this,obj,fieldID,val);
  1230.     }
  1231.     void SetByteField(jobject obj, jfieldID fieldID, 
  1232.               jbyte val) {
  1233.         functions->SetByteField(this,obj,fieldID,val);
  1234.     }
  1235.     void SetCharField(jobject obj, jfieldID fieldID, 
  1236.               jchar val) {
  1237.         functions->SetCharField(this,obj,fieldID,val);
  1238.     }
  1239.     void SetShortField(jobject obj, jfieldID fieldID,
  1240.                jshort val) {
  1241.         functions->SetShortField(this,obj,fieldID,val);
  1242.     }
  1243.     void SetIntField(jobject obj, jfieldID fieldID, 
  1244.              jint val) {
  1245.         functions->SetIntField(this,obj,fieldID,val);
  1246.     }
  1247.     void SetLongField(jobject obj, jfieldID fieldID, 
  1248.               jlong val) {
  1249.         functions->SetLongField(this,obj,fieldID,val);
  1250.     }
  1251.     void SetFloatField(jobject obj, jfieldID fieldID, 
  1252.                jfloat val) {
  1253.         functions->SetFloatField(this,obj,fieldID,val);
  1254.     }
  1255.     void SetDoubleField(jobject obj, jfieldID fieldID, 
  1256.             jdouble val) {
  1257.         functions->SetDoubleField(this,obj,fieldID,val);
  1258.     }
  1259.  
  1260.     jmethodID GetStaticMethodID(jclass clazz, const char *name, 
  1261.                 const char *sig) {
  1262.         return functions->GetStaticMethodID(this,clazz,name,sig);
  1263.     }
  1264.  
  1265.     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID, 
  1266.                  ...) {
  1267.         va_list args;
  1268.     jobject result;
  1269.     va_start(args,methodID);
  1270.     result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1271.     va_end(args);
  1272.     return result;
  1273.     }
  1274.     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID, 
  1275.                   va_list args) {
  1276.         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1277.     }
  1278.     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID, 
  1279.                   jvalue *args) {
  1280.         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
  1281.     }
  1282.  
  1283.     jboolean CallStaticBooleanMethod(jclass clazz, 
  1284.                      jmethodID methodID, ...) {
  1285.         va_list args;
  1286.     jboolean result;
  1287.     va_start(args,methodID);
  1288.     result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1289.     va_end(args);
  1290.     return result;
  1291.     }
  1292.     jboolean CallStaticBooleanMethodV(jclass clazz,
  1293.                       jmethodID methodID, va_list args) {
  1294.         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1295.     }
  1296.     jboolean CallStaticBooleanMethodA(jclass clazz,
  1297.                       jmethodID methodID, jvalue *args) {
  1298.         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
  1299.     }
  1300.  
  1301.     jbyte CallStaticByteMethod(jclass clazz,
  1302.                    jmethodID methodID, ...) {
  1303.         va_list args;
  1304.     jbyte result;
  1305.     va_start(args,methodID);
  1306.     result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1307.     va_end(args);
  1308.     return result;
  1309.     }
  1310.     jbyte CallStaticByteMethodV(jclass clazz,
  1311.                 jmethodID methodID, va_list args) {
  1312.         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1313.     }
  1314.     jbyte CallStaticByteMethodA(jclass clazz, 
  1315.                 jmethodID methodID, jvalue *args) {
  1316.         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
  1317.     }
  1318.  
  1319.     jchar CallStaticCharMethod(jclass clazz,
  1320.                    jmethodID methodID, ...) {
  1321.         va_list args;
  1322.     jchar result;
  1323.     va_start(args,methodID);
  1324.     result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1325.     va_end(args);
  1326.     return result;
  1327.     }
  1328.     jchar CallStaticCharMethodV(jclass clazz,
  1329.                 jmethodID methodID, va_list args) {
  1330.         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1331.     }
  1332.     jchar CallStaticCharMethodA(jclass clazz,
  1333.                 jmethodID methodID, jvalue *args) {
  1334.         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
  1335.     }
  1336.  
  1337.     jshort CallStaticShortMethod(jclass clazz,
  1338.                  jmethodID methodID, ...) {
  1339.         va_list args;
  1340.     jshort result;
  1341.     va_start(args,methodID);
  1342.     result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1343.     va_end(args);
  1344.     return result;
  1345.     }
  1346.     jshort CallStaticShortMethodV(jclass clazz,
  1347.                   jmethodID methodID, va_list args) {
  1348.         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1349.     }
  1350.     jshort CallStaticShortMethodA(jclass clazz,
  1351.                   jmethodID methodID, jvalue *args) {
  1352.         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
  1353.     }
  1354.  
  1355.     jint CallStaticIntMethod(jclass clazz,
  1356.                  jmethodID methodID, ...) {
  1357.         va_list args;
  1358.     jint result;
  1359.     va_start(args,methodID);
  1360.     result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1361.     va_end(args);
  1362.     return result;
  1363.     }
  1364.     jint CallStaticIntMethodV(jclass clazz,
  1365.                   jmethodID methodID, va_list args) {
  1366.         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1367.     }
  1368.     jint CallStaticIntMethodA(jclass clazz, 
  1369.                   jmethodID methodID, jvalue *args) {
  1370.         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
  1371.     }
  1372.  
  1373.     jlong CallStaticLongMethod(jclass clazz,
  1374.                    jmethodID methodID, ...) {
  1375.         va_list args;
  1376.     jlong result;
  1377.     va_start(args,methodID);
  1378.     result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1379.     va_end(args);
  1380.     return result;
  1381.     }
  1382.     jlong CallStaticLongMethodV(jclass clazz, 
  1383.                 jmethodID methodID, va_list args) {
  1384.         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1385.     }
  1386.     jlong CallStaticLongMethodA(jclass clazz, 
  1387.                 jmethodID methodID, jvalue *args) {
  1388.         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
  1389.     }
  1390.  
  1391.     jfloat CallStaticFloatMethod(jclass clazz, 
  1392.                  jmethodID methodID, ...) {
  1393.         va_list args;
  1394.     jfloat result;
  1395.     va_start(args,methodID);
  1396.     result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1397.     va_end(args);
  1398.     return result;
  1399.     }
  1400.     jfloat CallStaticFloatMethodV(jclass clazz, 
  1401.                   jmethodID methodID, va_list args) {
  1402.         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1403.     }
  1404.     jfloat CallStaticFloatMethodA(jclass clazz, 
  1405.                   jmethodID methodID, jvalue *args) {
  1406.         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
  1407.     }
  1408.  
  1409.     jdouble CallStaticDoubleMethod(jclass clazz, 
  1410.                    jmethodID methodID, ...) {
  1411.         va_list args;
  1412.     jdouble result;
  1413.     va_start(args,methodID);
  1414.     result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1415.     va_end(args);
  1416.     return result;
  1417.     }
  1418.     jdouble CallStaticDoubleMethodV(jclass clazz, 
  1419.                     jmethodID methodID, va_list args) {
  1420.         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1421.     }
  1422.     jdouble CallStaticDoubleMethodA(jclass clazz, 
  1423.                     jmethodID methodID, jvalue *args) {
  1424.         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
  1425.     }
  1426.  
  1427.     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
  1428.         va_list args;
  1429.     va_start(args,methodID);
  1430.     functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1431.     va_end(args);
  1432.     }
  1433.     void CallStaticVoidMethodV(jclass cls, jmethodID methodID, 
  1434.                    va_list args) {
  1435.         functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1436.     }
  1437.     void CallStaticVoidMethodA(jclass cls, jmethodID methodID, 
  1438.                    jvalue * args) {
  1439.         functions->CallStaticVoidMethodA(this,cls,methodID,args);
  1440.     }
  1441.  
  1442.     jfieldID GetStaticFieldID(jclass clazz, const char *name, 
  1443.                   const char *sig) {
  1444.         return functions->GetStaticFieldID(this,clazz,name,sig);
  1445.     }
  1446.     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
  1447.         return functions->GetStaticObjectField(this,clazz,fieldID);
  1448.     }
  1449.     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
  1450.         return functions->GetStaticBooleanField(this,clazz,fieldID);
  1451.     }
  1452.     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
  1453.         return functions->GetStaticByteField(this,clazz,fieldID);
  1454.     }
  1455.     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
  1456.         return functions->GetStaticCharField(this,clazz,fieldID);
  1457.     }
  1458.     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
  1459.         return functions->GetStaticShortField(this,clazz,fieldID);
  1460.     }
  1461.     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
  1462.         return functions->GetStaticIntField(this,clazz,fieldID);
  1463.     }
  1464.     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
  1465.         return functions->GetStaticLongField(this,clazz,fieldID);
  1466.     }
  1467.     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
  1468.         return functions->GetStaticFloatField(this,clazz,fieldID);
  1469.     }
  1470.     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
  1471.         return functions->GetStaticDoubleField(this,clazz,fieldID);
  1472.     }
  1473.  
  1474.     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
  1475.             jobject value) {
  1476.       functions->SetStaticObjectField(this,clazz,fieldID,value);
  1477.     }
  1478.     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
  1479.             jboolean value) {
  1480.       functions->SetStaticBooleanField(this,clazz,fieldID,value);
  1481.     }
  1482.     void SetStaticByteField(jclass clazz, jfieldID fieldID,
  1483.             jbyte value) {
  1484.       functions->SetStaticByteField(this,clazz,fieldID,value);
  1485.     }
  1486.     void SetStaticCharField(jclass clazz, jfieldID fieldID,
  1487.             jchar value) {
  1488.       functions->SetStaticCharField(this,clazz,fieldID,value);
  1489.     }
  1490.     void SetStaticShortField(jclass clazz, jfieldID fieldID,
  1491.             jshort value) {
  1492.       functions->SetStaticShortField(this,clazz,fieldID,value);
  1493.     }
  1494.     void SetStaticIntField(jclass clazz, jfieldID fieldID,
  1495.             jint value) {
  1496.       functions->SetStaticIntField(this,clazz,fieldID,value);
  1497.     }
  1498.     void SetStaticLongField(jclass clazz, jfieldID fieldID,
  1499.             jlong value) {
  1500.       functions->SetStaticLongField(this,clazz,fieldID,value);
  1501.     }
  1502.     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
  1503.             jfloat value) {
  1504.       functions->SetStaticFloatField(this,clazz,fieldID,value);
  1505.     }
  1506.     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
  1507.             jdouble value) {
  1508.       functions->SetStaticDoubleField(this,clazz,fieldID,value);
  1509.     }
  1510.  
  1511.     jstring NewString(const jchar *unicode, jsize len) {
  1512.         return functions->NewString(this,unicode,len);
  1513.     }
  1514.     jsize GetStringLength(jstring str) {
  1515.         return functions->GetStringLength(this,str);
  1516.     }
  1517.     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
  1518.         return functions->GetStringChars(this,str,isCopy);
  1519.     }
  1520.     void ReleaseStringChars(jstring str, const jchar *chars) {
  1521.         functions->ReleaseStringChars(this,str,chars);
  1522.     }
  1523.   
  1524.     jstring NewStringUTF(const char *utf) {
  1525.         return functions->NewStringUTF(this,utf);
  1526.     }
  1527.     jsize GetStringUTFLength(jstring str) {
  1528.         return functions->GetStringUTFLength(this,str);
  1529.     }
  1530.     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
  1531.         return functions->GetStringUTFChars(this,str,isCopy);
  1532.     }
  1533.     void ReleaseStringUTFChars(jstring str, const char* chars) {
  1534.         functions->ReleaseStringUTFChars(this,str,chars);
  1535.     }
  1536.  
  1537.     jsize GetArrayLength(jarray array) {
  1538.         return functions->GetArrayLength(this,array);
  1539.     }
  1540.  
  1541.     jobjectArray NewObjectArray(jsize len, jclass clazz, 
  1542.                 jobject init) {
  1543.         return functions->NewObjectArray(this,len,clazz,init);
  1544.     }
  1545.     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
  1546.         return functions->GetObjectArrayElement(this,array,index);
  1547.     }
  1548.     void SetObjectArrayElement(jobjectArray array, jsize index, 
  1549.                    jobject val) {
  1550.         functions->SetObjectArrayElement(this,array,index,val);
  1551.     }
  1552.  
  1553.     jbooleanArray NewBooleanArray(jsize len) {
  1554.         return functions->NewBooleanArray(this,len);
  1555.     }
  1556.     jbyteArray NewByteArray(jsize len) {
  1557.         return functions->NewByteArray(this,len);
  1558.     }
  1559.     jcharArray NewCharArray(jsize len) {
  1560.         return functions->NewCharArray(this,len);
  1561.     }
  1562.     jshortArray NewShortArray(jsize len) {
  1563.         return functions->NewShortArray(this,len);
  1564.     }
  1565.     jintArray NewIntArray(jsize len) {
  1566.         return functions->NewIntArray(this,len);
  1567.     }
  1568.     jlongArray NewLongArray(jsize len) {
  1569.         return functions->NewLongArray(this,len);
  1570.     }
  1571.     jfloatArray NewFloatArray(jsize len) {
  1572.         return functions->NewFloatArray(this,len);
  1573.     }
  1574.     jdoubleArray NewDoubleArray(jsize len) {
  1575.         return functions->NewDoubleArray(this,len);
  1576.     }
  1577.  
  1578.     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
  1579.         return functions->GetBooleanArrayElements(this,array,isCopy);
  1580.     }
  1581.     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
  1582.         return functions->GetByteArrayElements(this,array,isCopy);
  1583.     }
  1584.     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
  1585.         return functions->GetCharArrayElements(this,array,isCopy);
  1586.     }
  1587.     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
  1588.         return functions->GetShortArrayElements(this,array,isCopy);
  1589.     }
  1590.     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
  1591.         return functions->GetIntArrayElements(this,array,isCopy);
  1592.     }
  1593.     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
  1594.         return functions->GetLongArrayElements(this,array,isCopy);
  1595.     }
  1596.     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
  1597.         return functions->GetFloatArrayElements(this,array,isCopy);
  1598.     }
  1599.     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
  1600.         return functions->GetDoubleArrayElements(this,array,isCopy);
  1601.     }
  1602.  
  1603.     void ReleaseBooleanArrayElements(jbooleanArray array, 
  1604.                      jboolean *elems,
  1605.                      jint mode) {
  1606.         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
  1607.     }
  1608.     void ReleaseByteArrayElements(jbyteArray array, 
  1609.                   jbyte *elems,
  1610.                   jint mode) {
  1611.         functions->ReleaseByteArrayElements(this,array,elems,mode);
  1612.     }
  1613.     void ReleaseCharArrayElements(jcharArray array, 
  1614.                   jchar *elems,
  1615.                   jint mode) {
  1616.         functions->ReleaseCharArrayElements(this,array,elems,mode);
  1617.     }
  1618.     void ReleaseShortArrayElements(jshortArray array, 
  1619.                    jshort *elems,
  1620.                    jint mode) {
  1621.         functions->ReleaseShortArrayElements(this,array,elems,mode);
  1622.     }
  1623.     void ReleaseIntArrayElements(jintArray array, 
  1624.                  jint *elems,
  1625.                  jint mode) {
  1626.         functions->ReleaseIntArrayElements(this,array,elems,mode);
  1627.     }
  1628.     void ReleaseLongArrayElements(jlongArray array, 
  1629.                   jlong *elems,
  1630.                   jint mode) {
  1631.         functions->ReleaseLongArrayElements(this,array,elems,mode);
  1632.     }
  1633.     void ReleaseFloatArrayElements(jfloatArray array, 
  1634.                    jfloat *elems,
  1635.                    jint mode) {
  1636.         functions->ReleaseFloatArrayElements(this,array,elems,mode);
  1637.     }
  1638.     void ReleaseDoubleArrayElements(jdoubleArray array, 
  1639.                     jdouble *elems,
  1640.                     jint mode) {
  1641.         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
  1642.     }
  1643.  
  1644.     void GetBooleanArrayRegion(jbooleanArray array, 
  1645.                    jsize start, jsize len, jboolean *buf) {
  1646.         functions->GetBooleanArrayRegion(this,array,start,len,buf);
  1647.     }
  1648.     void GetByteArrayRegion(jbyteArray array, 
  1649.                 jsize start, jsize len, jbyte *buf) {
  1650.         functions->GetByteArrayRegion(this,array,start,len,buf);
  1651.     }
  1652.     void GetCharArrayRegion(jcharArray array, 
  1653.                 jsize start, jsize len, jchar *buf) {
  1654.         functions->GetCharArrayRegion(this,array,start,len,buf);
  1655.     }
  1656.     void GetShortArrayRegion(jshortArray array, 
  1657.                  jsize start, jsize len, jshort *buf) {
  1658.         functions->GetShortArrayRegion(this,array,start,len,buf);
  1659.     }
  1660.     void GetIntArrayRegion(jintArray array, 
  1661.                jsize start, jsize len, jint *buf) {
  1662.         functions->GetIntArrayRegion(this,array,start,len,buf);
  1663.     }
  1664.     void GetLongArrayRegion(jlongArray array, 
  1665.                 jsize start, jsize len, jlong *buf) {
  1666.         functions->GetLongArrayRegion(this,array,start,len,buf);
  1667.     }
  1668.     void GetFloatArrayRegion(jfloatArray array, 
  1669.                  jsize start, jsize len, jfloat *buf) {
  1670.         functions->GetFloatArrayRegion(this,array,start,len,buf);
  1671.     }
  1672.     void GetDoubleArrayRegion(jdoubleArray array, 
  1673.                   jsize start, jsize len, jdouble *buf) {
  1674.         functions->GetDoubleArrayRegion(this,array,start,len,buf);
  1675.     }
  1676.  
  1677.     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, 
  1678.                    jboolean *buf) {
  1679.         functions->SetBooleanArrayRegion(this,array,start,len,buf);
  1680.     }
  1681.     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
  1682.                 jbyte *buf) {
  1683.         functions->SetByteArrayRegion(this,array,start,len,buf);
  1684.     }
  1685.     void SetCharArrayRegion(jcharArray array, jsize start, jsize len, 
  1686.                 jchar *buf) {
  1687.         functions->SetCharArrayRegion(this,array,start,len,buf);
  1688.     }
  1689.     void SetShortArrayRegion(jshortArray array, jsize start, jsize len, 
  1690.                  jshort *buf) {
  1691.         functions->SetShortArrayRegion(this,array,start,len,buf);
  1692.     }
  1693.     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
  1694.                jint *buf) {
  1695.         functions->SetIntArrayRegion(this,array,start,len,buf);
  1696.     }
  1697.     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
  1698.                 jlong *buf) {
  1699.         functions->SetLongArrayRegion(this,array,start,len,buf);
  1700.     }
  1701.     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, 
  1702.                  jfloat *buf) {
  1703.         functions->SetFloatArrayRegion(this,array,start,len,buf);
  1704.     }
  1705.     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
  1706.                   jdouble *buf) {
  1707.         functions->SetDoubleArrayRegion(this,array,start,len,buf);
  1708.     }
  1709.  
  1710.     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
  1711.              jint nMethods) {
  1712.         return functions->RegisterNatives(this,clazz,methods,nMethods);
  1713.     }
  1714.     jint UnregisterNatives(jclass clazz) {
  1715.         return functions->UnregisterNatives(this,clazz);
  1716.     }  
  1717.    
  1718.     jint MonitorEnter(jobject obj) {
  1719.         return functions->MonitorEnter(this,obj);
  1720.     }
  1721.     jint MonitorExit(jobject obj) {
  1722.         return functions->MonitorExit(this,obj);
  1723.     }
  1724.  
  1725.     jint GetJavaVM(JavaVM **vm) {
  1726.         return functions->GetJavaVM(this,vm);
  1727.     }
  1728.   
  1729. #endif /* __cplusplus */
  1730. };
  1731.  
  1732. /* These structures will be VM-specific. */
  1733.  
  1734. typedef struct JDK1_1InitArgs {
  1735.     jint version;
  1736.  
  1737.     char **properties;
  1738.     jint checkSource; 
  1739.     jint nativeStackSize;
  1740.     jint javaStackSize;
  1741.     jint minHeapSize;
  1742.     jint maxHeapSize;
  1743.     jint verifyMode;
  1744.     char *classpath;
  1745.  
  1746.     jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
  1747.     void (JNICALL *exit)(jint code);
  1748.     void (JNICALL *abort)();
  1749.     
  1750.     jint enableClassGC;
  1751.     jint enableVerboseGC;
  1752.     jint disableAsyncGC;
  1753.     jint verbose;
  1754.     jboolean debugging;
  1755.     jint debugPort;
  1756. } JDK1_1InitArgs;
  1757.  
  1758. typedef struct JDK1_1AttachArgs {
  1759.     void * __padding; /* C compilers don't allow empty structures. */
  1760. } JDK1_1AttachArgs;
  1761.  
  1762. /* End VM-specific. */
  1763.  
  1764. struct JNIInvokeInterface_ {
  1765.     void *reserved0;
  1766.     void *reserved1;
  1767.     void *reserved2;
  1768.  
  1769.     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
  1770.  
  1771.     jint (JNICALL *AttachCurrentThread)
  1772.       (JavaVM *vm, JNIEnv **penv, void *args);
  1773.  
  1774.     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
  1775. };
  1776.  
  1777. struct JavaVM_ {
  1778.     const struct JNIInvokeInterface_ *functions;
  1779.     void *reserved0;
  1780.     void *reserved1;
  1781.     void *reserved2;
  1782. #ifdef __cplusplus
  1783.  
  1784.     jint DestroyJavaVM() {
  1785.         return functions->DestroyJavaVM(this);
  1786.     }
  1787.     jint AttachCurrentThread(JNIEnv **penv, void *args) {
  1788.         return functions->AttachCurrentThread(this, penv, args);
  1789.     }
  1790.     jint DetachCurrentThread() {
  1791.         return functions->DetachCurrentThread(this);
  1792.     }
  1793.  
  1794. #endif
  1795. };
  1796.  
  1797. JNI_PUBLIC_API(void) JNI_GetDefaultJavaVMInitArgs(void *);
  1798.  
  1799. JNI_PUBLIC_API(jint) JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);
  1800.  
  1801. JNI_PUBLIC_API(jint) JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
  1802. JNI_PUBLIC_API(jref) JNI_MakeLocalRef(JNIEnv *pJNIEnv, void *pHObject);
  1803.  
  1804. #ifdef __cplusplus
  1805. } /* extern "C" */
  1806. #endif /* __cplusplus */
  1807.  
  1808. #endif /* JNI_H */
  1809.  
  1810.  
  1811.